package com.unitd.modules.sys.controller;

import com.github.pagehelper.PageInfo;
import com.unitd.frame.comm.utils.BooleanUtils;
import com.unitd.frame.sso.annotation.Permission;
import com.unitd.comm.web.BaseController;
import com.unitd.frame.comm.utils.DateUtils;
import com.unitd.frame.comm.utils.MapUtils;
import com.unitd.frame.comm.utils.StringUtils;
import com.unitd.modules.sys.entity.SysDict;
import com.unitd.modules.sys.service.ISysDictService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.Map;

/**
 * @desc 字典表View端控制器类
 * @filename SysDictController.java
 * @copyright www.unitd.com
 * @author Hudan
 * @version 1.0
 * @date 2017-04-26
 */
@Controller
@RequestMapping("/sys/sysDict")
public class SysDictController extends BaseController {

	@Autowired
	private ISysDictService sysDictService;

	/**
	* @desc 转到信息列表页
	* @return 列表页地址
	*/
	@Permission("sys:sysDict:list")
	@RequestMapping("/list")
	public String list() {
		return "/modules/sys/sysDict/list";
	}

	/**
	* @desc 获取信息列表json数据,方便列表页通过ajax获取并展示
	* @param param 前端请求参数信息
	* @return json数据
	*/
	@Permission("sys:sysDict:list")
	@RequestMapping("/listJson")
	@ResponseBody
	public String listJson(@RequestParam Map<String, Object> param) {

		// 获取分页数据信息
		Map<String, Integer> pageMap = getPageMap();

		// 转换页面查询参数为查询对象
		SysDict sysDict = new SysDict();
		MapUtils.toBean(param, sysDict);

		// 查询列表数据
		PageInfo<SysDict> pageData = sysDictService.getPageData(pageMap.get("pageNo"), pageMap.get("pageSize"), sysDict);
		return jsonPage(pageData);
	}

	/**
	* @desc 根据主键ID获取详情信息,并将获取的信息在详情页展示转到信息列表页
	* @return 详情页地址及数据
	*/
	@Permission("sys:sysDict:list")
	@RequestMapping("/edit/{id}")
	public String edit(Model model, @PathVariable("id") String id) {
		if (!StringUtils.isZero(id)) {
			SysDict sysDict = sysDictService.selectByPrimaryKey(id);
			model.addAttribute("sysDict", sysDict);
		}
		return "/modules/sys/sysDict/edit";
	}

	/**
	 * @desc 处理详情信息的新增/修改操作
	 * @param sysDict 需要新增/修改的详情信息
	 * @return 操作结果
	 */
	@Permission("sys:sysDict:edit")
	@RequestMapping("/edit")
	@ResponseBody
	public String edit(SysDict sysDict) {
		int result = 0;

		if (sysDict != null) {
			if (!StringUtils.isZero(sysDict.getId())) {
				sysDict.setUpdateBy(getSSOToken().getUid());
				sysDict.setUpdateDate(DateUtils.formatDate(new Date(), DateUtils.TIMESTAMP_PATTERN));
				sysDict.preUpdate();
				result = sysDictService.updateByPrimaryKeySelective(sysDict);
			} else {
				sysDict.setCreateBy(getSSOToken().getUid());
				sysDict.setCreateDate(DateUtils.formatDate(new Date(), DateUtils.TIMESTAMP_PATTERN));
				sysDict.preInsert();
				result = sysDictService.insertSelective(sysDict);
			}
		}
		return callbackSuccess(retBool(result));
	}

	/**
	 * @desc 根据主键ID, 删除对应的详情信息
	 * @param id 需要删除的详情信息ID
	 * @return 删除结果
	 */
	@Permission("sys:sysDict:delete")
	@RequestMapping("/delete/{id}")
	@ResponseBody
	public String delete(@PathVariable("id") String id) {
		// 根据ID删除信息
		sysDictService.deleteByPrimaryKey(id);
		return BooleanUtils.toString(true);
	}

	/**
	 * @desc 根据主键ID集合, 删除对应的详情信息
	 * @param ids 需要删除的详情信息ID集合
	 * @return 删除结果
	 */
	@Permission("sys:sysDict:delete")
	@RequestMapping("/delete")
	@ResponseBody
	public String delete(@RequestBody String[] ids) {
		for (String id : ids) {
			sysDictService.deleteByPrimaryKey(id);
		}
		return BooleanUtils.toString(true);
	}
}